Spring JDBC-এ Custom Exception তৈরি এবং সেগুলি সঠিকভাবে Handle করা গুরুত্বপূর্ণ, কারণ এটি আপনার অ্যাপ্লিকেশনকে আরও robust এবং মেইন্টেনেবল করে তোলে। Spring JDBC সাধারণত SQLException অথবা DataAccessException (Spring JDBC এর এক্সসেপশন হায়ারার্কি) ব্যবহার করে, তবে আপনি যদি আরও নির্দিষ্ট এবং কাস্টমাইজড এক্সসেপশন তৈরি করতে চান, তবে সেটা আপনার কোডের কার্যকারিতা এবং ত্রুটি হ্যান্ডলিংকে আরো ভালো করতে সাহায্য করবে।
Spring-এ কাস্টম এক্সসেপশন তৈরি করতে, সাধারণত আপনি একটি নতুন ক্লাস তৈরি করবেন যা RuntimeException
অথবা Exception
ক্লাস থেকে ইনহেরিট করবে।
// Custom Exception class
public class UserNotFoundException extends RuntimeException {
// Default constructor
public UserNotFoundException(String message) {
super(message);
}
// Constructor with cause
public UserNotFoundException(String message, Throwable cause) {
super(message, cause);
}
}
এখানে:
UserNotFoundException
একটি কাস্টম এক্সসেপশন ক্লাস তৈরি করা হয়েছে যা RuntimeException
থেকে ইনহেরিট করেছে।super(message)
ব্যবহার করে আপনি এক্সসেপশন বার্তা পাঠাতে পারেন।এখন, ধরুন আমরা একটি রেপোজিটরি ক্লাস তৈরি করতে যাচ্ছি যেখানে ডেটাবেস থেকে ইউজারের তথ্য নেওয়ার সময় যদি কোনো ইউজার পাওয়া না যায়, তাহলে আমরা কাস্টম এক্সসেপশনটি থ্রো করবো।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.HashMap;
import java.util.Map;
@Repository
public class UserRepository {
@Autowired
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
// Method to fetch user by ID
public User getUserById(int userId) {
String sql = "SELECT * FROM users WHERE user_id = :userId";
Map<String, Object> params = new HashMap<>();
params.put("userId", userId);
// Executing the query
User user = namedParameterJdbcTemplate.queryForObject(sql, params, new UserRowMapper());
// If user is not found, throw custom exception
if (user == null) {
throw new UserNotFoundException("User with ID " + userId + " not found.");
}
return user;
}
}
এখানে:
getUserById()
মেথডে যদি কোনো ইউজার না পাওয়া যায়, তাহলে আমরা UserNotFoundException
থ্রো করছি।queryForObject()
মেথডটি ইউজারকে ডেটাবেস থেকে ফেরত আনে, এবং যদি ইউজার না পাওয়া যায়, তাহলে user == null
চেকের মাধ্যমে কাস্টম এক্সসেপশন থ্রো করা হয়।Spring Framework এর @ControllerAdvice বা @ExceptionHandler ব্যবহার করে কাস্টম এক্সসেপশনগুলি গ্লোবালি হ্যান্ডল করা যেতে পারে। এটি একটি সাধারণ পদ্ধতি যেখানে আপনি এক্সসেপশন গুলোকে একটি সেন্ট্রাল প্লেসে ক্যাচ এবং হ্যান্ডল করতে পারেন।
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ControllerAdvice;
@ControllerAdvice
public class GlobalExceptionHandler {
// Handle UserNotFoundException globally
@ExceptionHandler(UserNotFoundException.class)
public ResponseEntity<String> handleUserNotFoundException(UserNotFoundException ex) {
// You can log the exception or send a custom response
return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);
}
// Handle any other general exceptions
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleGeneralException(Exception ex) {
return new ResponseEntity<>("An unexpected error occurred: " + ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
এখানে:
ResponseEntity
ব্যবহার করা হয়েছে, যা HTTP স্ট্যাটাস এবং কাস্টম মেসেজ সহ রেসপন্স ফেরত দেয়।RuntimeException
বা Exception
ক্লাস থেকে ইনহেরিট করা হয়।@ControllerAdvice
বা @ExceptionHandler
ব্যবহার করে কাস্টম এক্সসেপশনগুলি গ্লোবালি হ্যান্ডল করা যেতে পারে। এটি আপনার অ্যাপ্লিকেশনের রেজিলিয়েন্স এবং রক্ষণাবেক্ষণ ক্ষমতা বৃদ্ধি করে।এভাবে Spring JDBC-তে Custom Exception তৈরি এবং Handle করা খুবই সহজ এবং কার্যকর পদ্ধতি।
Read more